/**
 * <b>项目名：</b>亲子分享-服务端项目<br/>
 * <b>包名：</b>com.saas.service<br/>
 * <b>文件名：</b>FileService.java<br/>
 * <b>版本信息：</b>V1.0<br/>
 * <b>日期：</b>2014-9-2-下午04:08:16<br/>
 * <b>作者：</b><br/>
 * <b>Copyright (c)</b> 2014坚果(北京)科技有限公司-版权所有<br/>
 */
package com.saas.service;

import com.alibaba.fastjson.JSONObject;
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
import com.saas.dao.MongoDAO;
import com.saas.exception.ServiceException;
import com.saas.util.Constant;
import com.saas.util.DateUtils;
import com.saas.util.FileUtil;
import com.saas.util.SaasConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.io.File;
import java.util.Date;

/**
 * 
 * <b>类名称：</b>FileService<br/>
 * <b>类描述：</b><br/>
 * <b>创建人：</b><br/>
 * <b>修改人：</b><br/>
 * <b>修改时间：</b>2014-9-2 下午04:08:16<br/>
 * <b>修改备注：</b><br/>
 * 
 * @version 1.0.0<br/>
 * 
 */
@Component
public class FileService{

	@Autowired
	private MongoDAO mongoDao;

	/**
	 * 
	 * 上传文件
	 * @param json json
	 * @return
	 * String
	 * @exception
	 * @since  1.0.0
	 */
	public String uploadFile(String json)throws ServiceException{
		
		DBObject dbObject =(DBObject)JSON.parse(json);
		String base64File = dbObject.get(Constant.files_content).toString();
		String imgType = dbObject.get(Constant.files_filetype).toString();
		if(StringUtils.isEmpty(base64File) || StringUtils.isEmpty(imgType)){
			throw new ServiceException(Constant.files_content+" or "+Constant.files_filetype+" 不能为空");
		}
		//处理json 清除图片数据
		dbObject.removeField(Constant.files_content);
		
		//保存
		JSONObject obj = mongoDao.save(Constant.model_files, dbObject.toString());
		String objectId = obj.getString(Constant.OBJECTID);
		//添加 path host 属性
		String fileName = objectId + "." + imgType;
		String path = "/"+Constant.USER_UPLOAD_DIRECTORY+"/"+DateUtils.dateToString(new Date(), "yyyyMMdd");
		mongoDao.update(Constant.model_files, "{'"+Constant.files_path+"':'"+path+"/"+fileName+"','"+Constant.files_host+"':'"+SaasConfig.imgUrl+"'}", objectId);
		
		//上传图片
		FileUtil.saveBase64(SaasConfig.uploadFileDirector + path, fileName, base64File);
		
		//返回json
		return this.get(objectId);
	}
	/**
	 * 获取一个文件（不支持获取内容）
	 * @param id
	 * @return
	 */
	public String get(String id) throws ServiceException{
		String json = mongoDao.get(Constant.model_files, id);
		return json;
	}
	/**
	 * 删除一个文件,同时删除磁盘内容
	 * @param id
	 * @throws Exception 
	 */
	public void delete(String id) throws ServiceException {
		String json = this.get(id);
		if(json == null){
			throw new ServiceException("文件不存在");
		}
		//删除图片
		DBObject dbObject =(DBObject)JSON.parse(json);
		String path = dbObject.get("path").toString();
		File file = new File(path);
		file.deleteOnExit();
		mongoDao.delete(Constant.model_files, id);
	}
	
}

